////////////////////////////////////////////////////////////////////////////////

#ifndef _CLIENT_ENGINE_H_
#define _CLIENT_ENGINE_H_

////////////////////////////////////////////////////////////////////////////////

#include <utility>
#include "common_types.h"

////////////////////////////////////////////////////////////////////////////////


class Client;


/** Game client engine
*
*  @author   Roman Pasechnik
*  @since    Jun 04th, 2009
*  @updated  Jun 12th, 2009
*/
class ClientEngine
{
////////////////////////////////////////////////////////////////////////////////

public:

////////////////////////////////////////////////////////////////////////////////


    /** Constructor */
    ClientEngine( Client* _client );


    /** Destructor */
    virtual ~ClientEngine();


////////////////////////////////////////////////////////////////////////////////


    /** Key's flags */
    enum StateFlags
    {
        W_KEY   = 0x1,
        A_KEY   = 0x2,
        D_KEY   = 0x4,
        S_KEY   = 0x8,
        MOUSE_1 = 0x10
    };


////////////////////////////////////////////////////////////////////////////////


    /** Process engine events */
    void ProcessEvent( STM::Event _event );


    /** Process mouse motion */
    void ProcessMouseMotion( unsigned short _x, unsigned short _y );


    /** Gets key flags */
    unsigned int GetKeyFlags() const;


    /** Gets player mouse position */
    STM::ScrPosition GetMousePosition() const;


////////////////////////////////////////////////////////////////////////////////

private:

////////////////////////////////////////////////////////////////////////////////


    /** Key flags
     *
     *  
     */
    unsigned int m_KeyFlags;


    /** Mouse coordinates */
    STM::ScrPosition m_MousePosition;


    /** Client interface */
    Client* m_Client;


////////////////////////////////////////////////////////////////////////////////
};


////////////////////////////////////////////////////////////////////////////////

#endif

////////////////////////////////////////////////////////////////////////////////

